package DAOS;

import DTOS.ArticuloDTO;
import DTOS.EventoDTO;
import Datos.PasarelaDatos;
import Datos.ResultSets;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Alan Gonzalez
 */
public class ErpMobileDAO {

    private PasarelaDatos db;
    private ResultSets res;

    public ErpMobileDAO() {
        db = new PasarelaDatos();
        res = new ResultSets();
    }

    /**
     * ALAN GONZALEZ DEVUELVE EL PERFIL DE UN ARTICULO
     *
     * @param cb
     * @return
     */
    public ArticuloDTO articuloDescripcion(String cb) {
        ArticuloDTO articuloDescripcion = new ArticuloDTO();
        String sql = "SELECT * FROM catalogo WHERE catalogo.cb = '" + cb + "'";
        db.openDatabase();
        ResultSet rst = db.executeQuery(sql);
        try {
            if (rst.next()) {
                articuloDescripcion = res.articuloDTO(rst);
            } else {
                articuloDescripcion = null;
                System.out.println("ERRORO NO SE  ENCONTRO REGISTRO Y SE CARGA EL OBJETO NULO");
            }
        } catch (SQLException ex) {
            Logger.getLogger(ErpMobileDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return articuloDescripcion;
    }

    /**
     * ALAN GONZALEZ METOD PARADEVOLVER LOS EVENTOS MAS RECIENTES GENERADOS POR
     * EL O LOS COLECTORES DE DATOS CONECTADOS A ESTA BASE
     *
     * @return
     */
    public Vector eventos(int limite) {
        Vector vEventos = new Vector();
        String sql = "SELECT * FROM eventos ORDER BY eventos.fecha DESC, eventos.hora DESC  LIMIT  " + limite;
        db.openDatabase();
        ResultSet rst = db.executeQuery(sql);
        try {
            while (rst.next()) {
                EventoDTO e = new EventoDTO();
                e = res.eventoDTO(rst);
                vEventos.add(e);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ErpMobileDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return vEventos;
    }

    /**
     * ALAN GONZALEZ CARGA TODOS LOS REGISTROS DE ACTIVIDAD 
     * @param limite
     * @return 
     */
    public Vector todoEventos() {
        Vector vEventos = new Vector();
        String sql = "SELECT * FROM eventos ORDER BY eventos.fecha DESC, eventos.hora DESC ";
        db.openDatabase();
        ResultSet rst = db.executeQuery(sql);
        try {
            while (rst.next()) {
                EventoDTO e = new EventoDTO();
                e = res.eventoDTO(rst);
                vEventos.add(e);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ErpMobileDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return vEventos;
    }

    /**
     * METODO QUE REGISTRA TODO TIPO DE ACTIVIDAD
     *
     * @param articulo
     */
    public void registroActividad(String cb, double cantidadInvolucrada, int tipoActividad) {
        /*
         TIPO DE ACTIVIDAD  PARA EL REGISTRO
         1.- ENTRADA DE ALMACEN
         2-. SALIDA DE ALMANCE
         3.- EDICION DESCRIPCION
         4.- EDICION DE UNIDAD DE MEDIDA
         5.- EDICION DE RAZON SOCIAL 
         6.- EDICION DE COSTO UNITARIO
         8.- EDICION PRECIO DE LISTA 
         9.- EDICION UBICACION  
         10.- EDICION TIPO DE MERCANCIA O PRODUCTO  
         */
        db.openDatabase();
        String sql = new String();
        sql += " INSERT INTO eventos SET ";
        sql += " eventos.cb = '" + cb + "'";
        sql += " , eventos.evento = " + tipoActividad;
        sql += " , eventos.cantidad = " + cantidadInvolucrada;
        sql += " , eventos.fecha = NOW()";
        sql += " , eventos.hora = NOW();";
        db.execute(sql);
        db.closeDatabase();
    }

    /**
     * ALAN GOZALEZ
     *
     * @param cb
     * @return
     */
    public double cantidadActualProducto(String cb) {
        double cantidad = 0.00;
        String sql = "SELECT catalogo.existencia_neta AS EXISTENCIAS FROM catalogo WHERE catalogo.cb='" + cb + "'";
        db.openDatabase();
        ResultSet rst = db.executeQuery(sql);
        try {
            if (rst.next()) {
                cantidad = rst.getDouble("EXISTENCIAS");
            }
        } catch (SQLException ex) {
            Logger.getLogger(ErpMobileDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return cantidad;
    }

    /**
     * ALAN GOZNALEZ INGRESA EXISTENCIA DE MANERA UNITARIA CADA CB ENTRADO ES
     * SUMADO
     *
     * @param cb
     */
    public void ingresaExistenciaUnitaria(String cb) {
        ArticuloDTO articulo = new ArticuloDTO();
        articulo = this.articuloDescripcion(cb);
        String SQL_SUMA_EXISTENCIA = new String();
        SQL_SUMA_EXISTENCIA += " UPDATE ";
        SQL_SUMA_EXISTENCIA += " catalogo ";
        SQL_SUMA_EXISTENCIA += " SET ";
        SQL_SUMA_EXISTENCIA += " catalogo.existencia_neta = catalogo.existencia_neta + 1";// + (articulo.getExistencia_neta() + 1);
        SQL_SUMA_EXISTENCIA += " WHERE ";
        SQL_SUMA_EXISTENCIA += " catalogo.cb='" + cb + "'; ";

        db.openDatabase();
        db.execute(SQL_SUMA_EXISTENCIA);
        db.closeDatabase();
        /*
         TIPO DE ACTIVIDAD  PARA EL REGISTRO
         1.- ENTRADA DE ALMACEN
         2-. SALIDA DE ALMANCE
         3.- EDICION DESCRIPCION
         4.- EDICION DE UNIDAD DE MEDIDA
         5.- EDICION DE RAZON SOCIAL 
         6.- EDICION DE COSTO UNITARIO
         8.- EDICION PRECIO DE LISTA 
         9.- EDICION UBICACION  
         10.- EDICION TIPO DE MERCANCIA O PRODUCTO  
         */
        this.registroActividad(cb, 1, 1); // Codigo Barras | Cantidad | Tipod de actividad
    }

    /**
     * ALAN GONZALEZ METODO PARA REALIZAR UNA SALIDA UNITARIA
     *
     * @param cb
     */
    public void salidaExistenciaUnitaria(String cb) {
        db.openDatabase();
        String sql = new String();
        sql += " UPDATE ";
        sql += " catalogo ";
        sql += " SET ";
        sql += " catalogo.existencia_neta = catalogo.existencia_neta - 1";// + (articulo.getExistencia_neta() + 1);
        sql += " WHERE ";
        sql += " catalogo.cb='" + cb + "'; ";
        db.execute(sql);
        db.closeDatabase();
        /*
         TIPO DE ACTIVIDAD  PARA EL REGISTRO
         1.- ENTRADA DE ALMACEN
         2-. SALIDA DE ALMANCEN
         3.- EDICION DESCRIPCION
         4.- EDICION DE UNIDAD DE MEDIDA
         5.- EDICION DE RAZON SOCIAL 
         6.- EDICION DE COSTO UNITARIO
         8.- EDICION PRECIO DE LISTA 
         9.- EDICION UBICACION  
         10.- EDICION TIPO DE MERCANCIA O PRODUCTO  
         */
        this.registroActividad(cb, 1, 2); // Codigo Barras | Cantidad | Tipod de actividad
    }
    
    /**
     * alan g
     * @param misbolas 
     */
    public void pruebaVersionadoCodigo(int misbolas){
    misbolas = 2;
    }

}
